package com.dnndo.system.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dnndo.system.domain.dto.EnerateApiDTO;
import com.dnndo.system.mapper.CreateMapper;
import com.dnndo.system.service.ICreateService;
import com.dnndo.system.transApi.TransApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

import static com.dnndo.common.utils.SecurityUtils.getUserId;

/**
 * 文创合作服务实现类
 */
@Service
public class CreateServiceImpl implements ICreateService {

    private final CreateMapper createMapper;

    private final TransApi transApi;

    @Autowired
    public CreateServiceImpl(CreateMapper createMapper, TransApi transApi){
        this.createMapper = createMapper;
        this.transApi = transApi;
    }

    /**
     * 查询"我的创作空间"作品列表
     * 逻辑说明：
     * 1. 根据传入的dto参数（可包含用户ID、作品类型等）查询当前用户的创作空间作品。
     * 2. 直接调用Mapper的selectwork方法，返回作品DTO列表。
     *
     * @param userId 查询参数，包含用户ID等
     * @return List<EnerateApiDTO> 我的创作空间作品列表
     */
    @Override
    public List<EnerateApiDTO> selectwork(Long userId) {
        return createMapper.selectwork(userId);
    }

    /**
     * 加入"我的创作空间"
     * 逻辑说明：
     * 1. 设置当前登录用户ID到dto，确保数据归属。
     * 2. 调用Mapper的enerate_add方法，将作品加入创作空间。
     * 3. 返回受影响的记录数。
     *
     * @param dto 作品数据对象
     * @return int 受影响的数据库记录数，1表示加入成功
     */
    @Override
    public int enerate_add(EnerateApiDTO dto) {
        dto.setUserId(getUserId());
        if (dto.getTitleEn() == null ||dto.getTitleEn().isEmpty()){
            String translatedName = translateToEnglish(dto.getTitle());
            dto.setTitleEn(translatedName);
        }
        return createMapper.enerate_add(dto);
    }

    /**
     * 移除"我的创作空间"中的作品
     * 逻辑说明：
     * 1. 根据dto参数（需包含作品ID、用户ID等）删除指定作品。
     * 2. 调用Mapper的enerate_del方法，执行删除操作。
     * 3. 返回受影响的记录数。
     *
     * @param dto 作品数据对象
     * @return int 受影响的数据库记录数，1表示删除成功
     */
    @Override
    public int enerate_del(EnerateApiDTO dto) {
        return createMapper.enerate_del(dto);
    }

//    翻译
    private String translateToEnglish(String text) {
        if (text == null || text.isEmpty()) {
            return "";
        }
        JSONObject transResult = transApi.getTransResult(text, "zh", "en");
        JSONArray transArray = transResult.getJSONArray("trans_result");
        if (transArray != null && !transArray.isEmpty()) {
            JSONObject firstItem = transArray.getJSONObject(0);
            return firstItem.getString("dst");
        }
        return "";
    }
}
